.pragma library

//
// 使用するには、Amazon Webサービスへの登録が必要です。
// アクセスキー、秘密キー、アソシエイトIDを取得して「AmazonProductKey.jsへ
// 以下の変数で定義してください。
//
// var _accessKey = "hogehoge";
// var _secretKey = "homuhomu";
// var _associateTag = "tag-22";
//

Qt.include("base64.js")
Qt.include("jssha256.js")
Qt.include("AmazonProductKey.js")

var _version = "2011-08-01";
var _url = "ecs.amazonaws.jp"; // webservices.amazon.com

// サインされたURLを取得する
function getSignedURL(keyword, category, page_num){
    if(page_num === undefined){
        page_num = "1";
    }else if(page_num < 1){
        page_num = "1";
    }else{
        page_num = page_num + "";
    }

    var param = {
        "Service":"AWSECommerceService"
        , "AWSAccessKeyId":_accessKey
        , "Version":_version
        , "Timestamp":getTimestamp()
        , "Operation":"ItemSearch"
        , "ResponseGroup":"ItemAttributes" // ",Images"
        , "Keywords":keyword
        , "AssociateTag":_associateTag
        , "ItemPage":page_num
        , "SearchIndex":category
        };
    var param_array = [];
    var param_string = "";
    var signature = "";
    var hash_array = [];
    var hash_string = "";
    var url = "";
    var tmp = "";

    // URLエンコードして配列にする
    for(var name in param){
        tmp = encodeURIComponent(param[name]);
        tmp = tmp.replace("(", "%28");
        tmp = tmp.replace(")", "%29");
        tmp = tmp.replace("!", "%21");
        param_array.push(name + "=" + tmp);
    }
    // ソート
    param_array.sort();
    // 連結した文字列にする
    param_string = param_array.join("&");
    // 署名用文字列
    signature = "GET" + "\n" + _url + "\n" + "/onca/xml" + "\n" + param_string;
    // ハッシュ計算
    HMAC_SHA256_init(_secretKey);//"1234567890");
    HMAC_SHA256_write(signature);
    hash_array = HMAC_SHA256_finalize();
    for(var i=0; i<hash_array.length; i++){
        hash_string += String.fromCharCode(hash_array[i]);
    }
    // Base-64でエンコード
    signature = base64encode(hash_string);
    // パラメータ作成
    param_string += "&Signature=" + encodeURIComponent(signature);

    url = "http://" + _url + "/onca/xml?" + param_string;

    return url;
}

// タイムスタンプ取得
function getTimestamp(){
    var local = new Date();
    var utc = new Date(local.getUTCFullYear()
                       , local.getUTCMonth()
                       , local.getUTCDate()
                       , local.getUTCHours()
                       , local.getUTCMinutes()
                       , local.getUTCSeconds());
    return Qt.formatDateTime(utc, "yyyy-MM-ddThh:mm:ssZ");
}
